/*
 * 数据结构：图，邻接矩阵实现
 * 
*/
#pragma once
#include <vector>

/* 基于邻接矩阵实现的无向图类 */
class GraphAdjMat 
{
  public:
      /* 构造方法 */
      GraphAdjMat(const std::vector<int>& vertices, const std::vector<std::vector<int>>& edges);
      /* 获取顶点数量 */
      int size() const; 
      /* 添加顶点 */
      void addVertex(int val);
      /* 删除顶点 */
      void removeVertex(int index);
      /* 添加边 */
      // 参数 i, j 对应 vertices 元素索引
      void addEdge(int i, int j);
      /* 删除边 */
      // 参数 i, j 对应 vertices 元素索引
      void removeEdge(int i, int j);
      /* 打印邻接矩阵 */
      void print();

private:
    std::vector<int> vertices;       // 顶点列表，元素代表“顶点值”，索引代表“顶点索引”
    std::vector<std::vector<int>> adjMat; // 邻接矩阵，行列索引对应“顶点索引”
};